我的Bilibili频道:香芋派Taro
我的个人博客:taropie0224.github.io(阅读体验更佳)
我的公众号:香芋派的烘焙坊
我的音频技术交流群:1136403177
我的个人微信:JazzyTaroPie

https://leetcode-cn.com/problems/add-strings/

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution
{
public:
string addStrings(string num1, string num2)
{
int isAdvance = 0;
string res = "";
int n1 = num1.length() - 1, n2 = num2.length() - 1;
int Max = max(n1, n2);
while (Max >= 0 || isAdvance == 1)
{
int i = num1[n1] - '0';
int j = num2[n2] - '0';
// int ans = int(num1[n1]) + int(num1[n2]) + isAdvance; //这种强制类型转化是不行滴!
int ans = i + j + isAdvance;
res.push_back('0' + ans % 10);
isAdvance = ans >= 10 ? 1 : 0;
if (n1 > 0)
{
n1--;
}
else
{
num1[0] = '0';
}
if (n2 > 0)
{
n2--;
}
else
{
num2[0] = '0';
}
Max--;
}
reverse(res.begin(), res.end());
return res;
}
};

思路

其实就是一个竖式相加的过程

里面还是有几个踩坑的地方:

  1. 整型,字符串相加傻傻分不清楚,中间的类型转换太迷了,之后好好研究一下,比如- ‘0’和’0’ +
  2. 循环条件中需要加上上一次的运算是否有进位产生,否则如果两个数字相加后的最高位产生了进位的话就寄了,得补一位1,例如9+1,如果不判断的话输出就会是0,而不是10
  3. 因为是从后向前计算,如果其中一个数字的下标已经到了负数 (若两个数的位数不同),那么之后它跟另一个数的相加全部用0再跟另一个数相加即可,是一个“补零”的操作